Trong Elixir, việc xử lý dữ liệu tuân theo hai triết lý khác biệt: Tham lam (Nhanh nhảy) và Lười biếng. Việc hiểu rõ sự đánh đổi này là điều then chốt để tối ưu hóa hiệu suất bộ nhớ và độ ổn định hệ thống.
1. Giao thức Enumerable
Về mặt kỹ thuật, những thứ có thể duyệt qua được gọi là đã triển khai giao thức Enumerable. Giao thức chung này cho phép các cấu trúc dữ liệu khác nhau hoạt động với cùng một tập hợp hàm.
2. Các module Tham lam so với Lười biếng
Module Enum là tham lam. Nó có thể tiêu thụ toàn bộ nội dung của một bộ sưu tập ngay lập tức, tạo ra các danh sách trung gian tại mỗi bước trong luồng xử lý. Ngược lại, module Stream là lười biếng. Giá trị tiếp theo chỉ được tính toán khi chỉ khi nó thực sự cần thiết.
3. Mô tả so với Kết quả
Một giá trị Stream là một mô tả về những gì chúng ta muốn, chứ không phải kết quả thực tế. Các Stream có thể duyệt và ghép nối, cho phép bạn áp dụng nhiều thao tác chuyển đổi mà không thực thi công việc nào cho đến khi bạn truyền Stream vào một 'cửa xả' nhanh nhảy như Enum.to_list/1.
4. Tính thuần khiết của mô hình
Việc pha trộn các mô hình (chức năng và hướng đối tượng) sẽ làm giảm đi những lợi ích mà cách tiếp cận chức năng mang lại. Hãy ưu tiên các thao tác mô tả (declarative) hơn là các vòng lặp mệnh lệnh (imperative) để đảm bảo tính dự đoán được.